# -*- coding: utf-8 -*-
"""The base Controller API

Provides the BaseController class for subclassing, and other objects
utilized by Controllers.
"""
from pylons import c, cache, config, g, request, response, session
from pylons.controllers import WSGIController
from pylons.controllers.util import abort, etag_cache, redirect_to
from pylons.decorators import jsonify, validate
from pylons.i18n import _, ungettext, N_
from pylons.templating import render

import xadmin.lib.helpers as h
import xadmin.model as model
from xadmin.lib.xauth import XAuthentication

class BaseController(WSGIController):
    require_auth = False
    def __before__(self):
        if self.require_auth and not XAuthentication(request).verify():
            abort(401, 'Usuario no est� autorizado')

    def __call__(self, environ, start_response):
        """Invoke the Controller"""
        # WSGIController.__call__ dispatches to the Controller method
        # the request is routed to. This routing information is
        # available in environ['pylons.routes_dict']
        try:
            return WSGIController.__call__(self, environ, start_response)
        finally:
            model.Session.remove()

    def _getAbsoluteURL(self, relative_url = ''):
        return config['server.url'] + relative_url

    def response_create(self, ):
        del response.headers['Content-Type']
        response.status_code = 201

    def response_delete(self):
        del response.headers['Content-Type']
        response.status_code = 204
        return

    def response_update(self):
        del response.headers['Content-Type']
        response.status_code = 204

# Include the '_' function in the public names
__all__ = [__name for __name in locals().keys() if not __name.startswith('_') \
           or __name == '_']
